package example.testBeanPostProcessor;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.core.PriorityOrdered;
import org.springframework.stereotype.Component;

// 现在的问题是如果有多个类都实现了BeanPostProcessor，那么如何来确定每个类执行的顺序呢
//这就需要使用到下面的另外一个接口了PriorityOrdered
@Component
public class MyBeanPostProcessor2 implements BeanPostProcessor, PriorityOrdered {
	//初始化之前会执行的方法，需要注意的是最后一定要返回bean，否则spring的容器中不会有这个bean
	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		//这个后置处理器中的方法是对所有的bean都会生效，这里加上判断是循环到我们自己定义的bean的时候才执行
		//这里输出的位置是ComponentOne这个类的的构造方法之后，初始化方法之前
		if (beanName.equals("componentOne")) {
			System.out.println("postProcessBeforeInitialization2");
		}
		return bean;
	}

	//初始化之后会执行的方法，需要注意的是最后一定要返回bean，否则spring的容器中不会有这个bean
	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		//这里输出的位置是ComponentOne这个类的的构造方法和初始化方法之后
		if (beanName.equals("componentOne")) {
			System.out.println("postProcessAfterInitialization2");
		}
		return bean;
	}

	//这个接口可以确定类的执行顺序,这个方法返回一个整数,返回的值越小,越先执行
	@Override
	public int getOrder() {
		return 10;
	}
}
